[코담]
웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트
미니프로젝트 3 정답 | ✅저자: 이유정(박사)
프로젝트 코드명: `USER_DATA_VERIFIER_V3 프로젝트 유형: 조건문 및 예외 처리 통합 실습 미니 프로젝트
🖥️ 프로젝트 개요
이 미니 프로젝트는 사용자가 입력한 정보를 바탕으로
조건문(if, else)과 예외 처리(pass, raise NotImplementedError)를 활용하여 입력값을 분석하고 검증 결과 리포트를 출력하는 연습 과제입니다.
학생들은 값의 유효성 검사, 조건 분기, 자료형 변환, 문자열 처리를 실습하고, 미완성 함수는 raise NotImplementedError로 마무리하며 실제 프로그램처럼 구성하는 경험을 하게 됩니다.
◽ 이 프로젝트를 통해 자연스럽게 적용되는 내용
자료형 | 문자열(str), 정수(int), 불리언(bool) 처리 |
---|---|
입력/출력 | input() , print() 함수 사용 및 포맷 구성 |
조건문 | if , else , pass 를 통한 흐름 분기 |
예외 처리 | try-except , raise NotImplementedError 사용 |
문자열 처리 | .strip() , .upper() , .isdigit() , in 연산자 |
함수 구조 | def 함수 정의 및 예외 발생 구조 작성 |
코드 스타일 | 들여쓰기, 주석, 명확한 변수명, 결과 리포트 정리 등 |
📄 기능 요구사항 (Functional Requirements)
기능 ID .... | 기능 설명 | 세부 내용 |
---|---|---|
FR-01 | 사용자 입력 받기 | 이름, 나이, 이메일 입력을 받아 변수에 저장 |
FR-02 | 이름 유효성 검사 | 공백 제거 후, 길이가 2 미만일 경우 오류 메시지 출력 |
FR-03 | 나이 숫자 여부 확인 | isdigit() 으로 숫자인지 확인 후 int 변환 |
FR-04 | 나이에 따른 분기 출력 | 19세 이상이면 "성인", 아니면 "미성년자" 출력 |
FR-05 | 이메일 형식 검사 | @ 포함 여부 검사 후 올바른 형식 출력 / 아니면 pass 사용 |
FR-06 | 미완성 함수 정의 | process_phone() 함수 정의만 하고 raise NotImplementedError 발생 |
FR-07 | 예외 발생 시 처리 | NotImplementedError 예외를 try-except 로 처리하여 메시지 출력 |
📄 비기능 요구사항 (Non-Functional Requirements)
항목 | 설명 |
---|---|
코드 스타일 | 변수명 직관적으로 작성, 주석 5줄 이상 포함 |
가독성 | 들여쓰기 준수, 줄 간격 확보, 구분선 출력 포함 |
예외 처리 | ValueError , NotImplementedError 최소 1회 이상 활용 |
조건문 사용 | if , else , pass 를 적절히 활용한 흐름 제어 구현 |
출력 포맷 | 리포트 형태로 정리된 출력 구성 (===== 구분선 포함) |
✅ 출력 포맷 구성1:
사용자 이름을 입력하세요: eunjin
비밀번호를 입력하세요: pass1234
✅ 비밀번호 길이는 적절합니다.
🔐 비밀번호 보안 수준: 안전
비밀번호 보안 경고 기능은 아직 구현되지 않았습니다.
🎉 보안 점검 완료!
============================
✅ 출력 포맷 구성2:
사용자 이름을 입력하세요: admin_user
비밀번호를 입력하세요: admin1234
✅ 비밀번호 길이는 적절합니다.
🔐 비밀번호 보안 수준: 안전
🎉 보안 점검 완료!
============================
✅ 정답 코드:
# 사용자 입력 받기
username = input("사용자 이름을 입력하세요: ").strip()
password = input("비밀번호를 입력하세요: ").strip()
# 비밀번호 길이 검사
if len(password) < 8:
print("❗ 비밀번호가 너무 짧습니다. 보안에 취약할 수 있어요.")
else:
print("✅ 비밀번호 길이는 적절합니다.")
# 비밀번호 안전성 분석
has_digit = any(char.isdigit() for char in password)
has_lower = any(char.islower() for char in password)
# 조건에 따른 보안 메시지 출력
if has_digit and has_lower:
print("🔐 비밀번호 보안 수준: 안전")
elif has_digit or has_lower:
print("🛡️ 비밀번호 보안 수준: 보통")
else:
print("⚠️ 비밀번호 보안 수준: 취약")
# 'admin'이라는 문자열이 들어간 경우 → 경고를 넘김
if "admin" in password.lower():
pass # 경고 출력 생략
else:
# 경고 출력은 아직 구현 안됨 → 예외 발생
def warn_user():
raise NotImplementedError("비밀번호 보안 경고 기능은 아직 구현되지 않았습니다.")
try:
warn_user()
except NotImplementedError as e:
print(e)
# 결과 출력 마무리
print("\n🎉 보안 점검 완료!")
print("============================")